]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
overview: Sync grabs after running startup animation
authorJonas Dreßler <verdre@v0yd.nl>
Thu, 15 Apr 2021 14:58:17 +0000 (16:58 +0200)
committerMarge Bot <marge-bot@gnome.org>
Tue, 4 May 2021 16:18:30 +0000 (16:18 +0000)
In the nested session the startup animation sometimes fails, weirdly
that always happens to me when running a freshly built gnome-shell the
first time. The reason it fails is that mutter fails to aquire a pointer
grab from the xserver, XIGrabDevice() is unsuccessful.

A simple workaround for this race condition in the xserver is to just
grab the devices a bit later, that is after the startups animation
instead of before it.

This was also tested with disabled animations, and seems to work just as
well in that case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1812>

js/ui/overview.js

index ca5de0c22608097d70e71a851bda9b3f5f61082b..e6b3b261562dda99f84c1f312c8ce12740086029 100644 (file)
@@ -649,13 +649,20 @@ var Overview = class {
         this._visible = true;
         this._visibleTarget = true;
         Main.layoutManager.showOverview();
-        this._syncGrab();
+        // We should call this._syncGrab() here, but moved it to happen after
+        // the animation because of a race in the xserver where the grab
+        // fails when requested very early during startup.
 
         Meta.disable_unredirect_for_display(global.display);
 
         this.emit('showing');
 
         this._overview.runStartupAnimation(() => {
+            if (!this._syncGrab()) {
+                callback();
+                return;
+            }
+
             Main.panel.style = null;
             this.emit('shown');
             callback();